package com.itheima.controller;

import com.itheima.pojo.User;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.lang.reflect.Array;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

@RestController
public class RequestController {
    //获取请求数据最原始的方式
    //繁琐+需要手动类型转换
    @RequestMapping("/simpleParam0")
    public String simpleParam0(HttpServletRequest request){
        String name=request.getParameter("name");
        String ageStr=request.getParameter("age");
        //获取的是字符串，
        int age=Integer.parseInt(ageStr);
        System.out.println(name+"  "+age);
        return "OK";
    }

    //形参名称对应上就可以给到，对应不上就是null
    //加了这个注解后，如果不传递就会报错
    @RequestMapping("/simpleParam1")
    public String simpleParam1(@RequestParam("name") String username,Integer age){//这里基本数据类型要用包装类
        System.out.println(username+"  "+age);
        return "OK";
    }

    //简单pojo类的参数传递，名称一样就可以
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OKK";
    }

    //复杂pojo类的参数传递
    @RequestMapping("/complexPojo")//!!!不可以加构造方式
    public String complexPojo(User user){
        System.out.println(user);
        return "OKK";
    }


    //数组集合参数
    @RequestMapping("/arrayParam")//数组,只需要数组名称一致即可
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OK";
    }
    @RequestMapping("/listParam")//集合,只需要集合名称一致即可
    public String listParam(@RequestParam List<String> hobby){
        //集合需要@RequestParam才能封装进来数组,数组能完成的就不要用集合
        System.out.println(hobby);
        return "OK";
    }

    //日期类参数，最重要的是规定格式
    @RequestMapping("/dateParam")//需要注解规定格式@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updatetime){
        System.out.println(updatetime);
        return "OK";
    }

    @RequestMapping("/jsonParam")//json需要post请求，请求体的raw写
    public String jsonParam(@RequestBody User user){
        //RequestBody注解，将json数据封装进一个对象里
        //参数在请求体里
        System.out.println(user);
        return "OK";
    }
    //路径参数
    @RequestMapping("/path/{id}")//单个
    public String pathParam1(@PathVariable Integer id){
        System.out.println(id);
        return "OK";
    }

    @RequestMapping("/path/{id}/{name}")//多个
    public String pathParam2(@PathVariable Integer id,@PathVariable String name){
        System.out.println(id+" "+name);
        return "OK";
    }
}
